<?php

namespace App\Http\Controllers\admin;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use DB;
use Hash;
use DBManage;
class AdminController extends Controller
{
    /**
     * 静态判断是否有权限
     */
    static public function func($operation_name,$role_func){
        // 进行session判断操作管理是否关闭,管理员权限是否开启，如果没有权限则返回
        if(session($operation_name) == 2 || empty(strstr(session('role_func'),$role_func))){
                return true;
        }
    }
    /**
     * 管理员列表
     * 
     * @param    array    $data    数据库查询内容
     * @return 列表模板
     */
    public function getIndex(Request $request)
    {
        // 调用判断方法,只要有一个为真则返回上一级
        if(self::func('管理员列表','admin_list')){
            return back() ->  with('error','违法操作,禁止访问');
        } 
        $count = $request -> input('count','10');
        $search = $request -> input('search','');
        //  关联数据库查询获取所有内容,第一个表为要关联的表
        $data = DB::table('roles')
         -> Join('admin','admin.role_id','=','roles.id')
         -> where('admin_name','like','%'.$search.'%')
         -> paginate($count);
        return view('admin.admin.list',['title'=>'管理员列表','data'=>$data,'request'=>$request->all()]);
    }

    /**
     * 管理员添加页面
     * 
     * @return    添加模板
     */
    public function getAdd(Request $request)
    {
        // 调用判断方法,只要有一个为真则返回上一级
        if(self::func('管理员添加','admin_add')){
            return back() ->  with('error','违法操作,禁止访问');
        } 
        // 获取管理员数据
        $data = DB::table('roles') -> lists('role_name','id');
        return view('admin.admin.add',['title'=>'管理员添加','data'=>$data]);
    }

    /**
     * 执行管理员添加
     * 
     * @param    array    $data         管理员插入表单内容
     * @param    bool     $res          添加执行代码 
     * @return    返回模板
     */
    public function postDoadd(Request $request)
    {   
        // 调用判断方法,只要有一个为真则返回上一级
        if(self::func('管理员添加','admin_add')){
            return back() ->  with('error','违法操作,禁止访问');
        } 
        $data = $request -> except(['_token']);
        // 使用哈希加密
        $data['admin_pass'] = Hash::make($data['admin_pass']);
        $res = DB::table('admin') -> insert($data);

        if($res){
            return redirect('/admin/admin/index') -> with('success','管理员添加成功');
        }else{
            return back() -> with('error','管理员添加失败');
        }

    }

    /**
     * 管理员删除
     * 
     * @param    int     $id    要删除的id值
     * @param    bool    $res   执行true or flase
     * @param    array   $id    获取单个删除的id值
     * @return   返回模板
     */
    public function getDelete(Request $request,$id = '')
    {
        // 调用判断方法,只要有一个为真则返回上一级
        if(self::func('管理员删除','admin_delete')){
            return back() ->  with('error','违法操作,禁止访问');
        } 
        if($id || $id = $request -> input('id')){
            $res = DB::table('admin') -> whereIn('id',$id) -> delete();
            if($res){
                return redirect('/admin/admin/index') -> with('success','管理员删除成功');
            }else{
                return back() -> with('error','管理员删除失败');
            }
        }

    }

    /**
     * 管理员修改
     * 
     * @param    int     $id     接收要修改的ID
     * @param    array   $data   单条查询内容
     * @return   修改模板
     */
    public function getEdit($id)
    {
        // 调用判断方法,只要有一个为真则返回上一级
        if(self::func('管理员修改','admin_edit')){
            return back() ->  with('error','违法操作,禁止访问');
        } 
        // 查询要修改的内容
        $role = DB::table('roles') -> lists('role_name','id');
        $data = DB::table('admin')->where('id',$id)->first();
        return view('/admin/admin/edit',['title'=>'管理员修改','data'=>$data,'role'=>$role]);
    }

    /** 
     * 执行管理员修改
     *
     * @param       int      $id          获取要修改的id值
     * @param       array    #data        获取内容
     * @param       bool     $res         判断是否修改成功bool or flash     
     * */
    public function postDoedit(Request $request)
    {   
        // 调用判断方法,只要有一个为真则返回上一级
        if(self::func('管理员修改','admin_edit')){
            return back() ->  with('error','违法操作,禁止访问');
        } 
        $id = $request -> only(['id']);
        // 获取除_token pic id 之外的值
        $data = $request -> except(['_token','id']);
        $res = DB::table('admin') -> where('id', $id) -> update($data);
        if($res){
            return redirect('/admin/admin/index') -> with('success','管理员修改成功');
        }else{
            return back() -> with('error','管理员修改失败');
        }
    }
    /**
     * 修改密码页面
     * 
     */
    public function getPass(Request $request)
    {
        // 调用判断方法,只要有一个为真则返回上一级
        if(self::func('修改你的密码','admin_pass')){
            return back() ->  with('error','违法操作,禁止访问');
        } 
        return view('/admin/admin/pass',['title'=>'修改你的密码']);
    }

    /**
     * 执行修改密码操作
     * 
     * @param          string           $new_pass          获取新密码
     * @param          bool             $resPass           进行检测输入的密码是否是原密码
     * @param          string           $new_pass          加密新密码
     * @param          bool             $res               是否修改成功
     */
    public function postEditpass(Request $request)
    {
        // 调用判断方法,只要有一个为真则返回上一级
        if(self::func('修改你的密码','admin_pass')){
            return back() ->  with('error','违法操作,禁止访问');
        } 
        $new_pass = $request -> input('new_pass');
        if($resPass = Hash::check($request -> input('admin_pass'),session('admin_pass'))){
            $new_pass = Hash::make($new_pass);
            $res = DB::table('admin') -> where('id',session('id')) -> update(['admin_pass'=>$new_pass]);
            if($res){
                return back() -> with('success','管理员密码修改成功');
            }else{
                return back() -> with('error','管理员密码修改失败');
            }
            
        }else{
            return back() -> with('error','当前密码输入错误');
        }
    }
}
